要進入 Line 的世界,首先需要先做以下的準備,
$ pip install line-bot-sdk
接著我們就可以開啟一個新的專案資料夾,結構如下:
linebot_test
├── .env
├── app.py
├── Pipfile
└── Pipfile.lock
接著在 .env
檔裡面加入以下內容,順便將剛剛複製的Channel access token 及 Channel secret 貼上去。
.env
CHANNEL_ACCESS_TOKEN = <channel access token>
CHANNEL_SECRET = <channel secret>
注意一下這兩組不要外流了,要好好保管好,不然別人就可以操控你的機器人了。
接著將以下的程式貼到 app.py
中,我們先將環境處理好,明天再來解釋我們做了什麼事。
app.py
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import os
app = Flask(__name__)
line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN']) # 可在無法取得值時返回異常
handler = WebhookHandler(os.environ['CHANNEL_SECRET']) # 可在無法取得值時返回異常
@app.route("/callback", methods=['POST'])
def callback():
# 抓 X-Line-Signature 標頭的值
signature = request.headers['X-Line-Signature']
# 抓 request body 的文字
body = request.get_data(as_text=True)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return "OK"
@handler.add(MessageEvent, message=(TextMessage))
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text)
)
return
if __name__ == '__main__':
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))
接著下載 ngrok ,解壓縮後執行以下指令。
$ ngrok http 5000
然後複製這邊的 URL (注意,這邊每次都會不一樣,所以不要照 Copy 我的)。
然後將我們的 app.py
run 起來。
$ python app.py
接著回到 LINE Developers 進入我們剛剛建立的機器人,再進入 Messaging API ,下方有個 Webhook URL 按下 edit ,將剛剛複製的 URL 貼上之後,後方加上 /callback
,按下 Update
,最後記得將下方 Usb Webhook
的開關打開。
如果沒意外的話,應該到這邊都不會有意外,只要加入剛剛產生的機器人,並且對他發送文字,機器人應該就會回復同樣的文字給你,這樣就代表成功了。
那麼就先到這邊,各位應該做到這邊都有點矇,不知道剛剛做了什麼東西,不過沒關係,明天會進行講解。
大家掰~掰~